package com.whfc.ms.api.mach.service;


import com.whfc.common.result.ListData;
import com.whfc.common.result.PageData;
import com.whfc.entity.dto.msg.AppWarnMsgRecDTO;
import com.whfc.fuum.entity.SysUser;
import com.whfc.mach.dto.AppMachDTO;
import com.whfc.mach.dto.warn.AppMachWarnCountDTO;
import com.whfc.mach.dto.warn.AppWarnDetailDTO;
import com.whfc.mach.dto.warn.AppWarnMachRecordDTO;
import com.whfc.mach.dto.warn.AppWarnRuleDTO;
import com.whfc.mach.param.warn.*;

import java.util.Date;

/**
 * @author sun_guodong
 * @description 设备报警
 * @date 2020-11-19
 */
public interface MsMachWarnService {
    /**
     * 设备报警次数统计
     *
     * @param deptId
     * @param state
     * @param startTime
     * @param endTime
     * @return
     */
    AppMachWarnCountDTO warnNumStatic(Integer deptId, Integer state, Date startTime, Date endTime);

    /**
     * 设备报警设置列表
     *
     * @param pageNum
     * @param pageSize
     * @param ruleType
     * @param keyword
     * @param deptId
     * @param enableFlag
     * @return
     */
    PageData<AppWarnRuleDTO> ruleList(Integer pageNum, Integer pageSize, Integer ruleType, String keyword, Integer deptId, Integer enableFlag);

    /**
     * 删除设备报警规则
     *
     * @param ruleId
     */
    void ruleDel(Integer ruleId);

    /**
     * 启用禁用报警
     *
     * @param request
     */
    void enable(AppWarnEnableParam request);

    /**
     * 添加设备报警规则
     *
     * @param request
     */
    void ruleAdd(AppWarnRuleAddParam request);

    /**
     * 编辑报警规则
     *
     * @param request
     */
    void ruleEdit(AppWarnRuleEditParam request);

    /**
     * 查找报警规则下的设备
     *
     * @param ruleId
     * @return
     */
    ListData<AppMachDTO> objectList(Integer ruleId);

    /**
     * 添加报警对象
     *
     * @param request
     */
    void objectAdd(AppWarnMachAddParam request);

    /**
     * 获取可添加报警的的设备列表
     *
     * @param ruleId
     * @return
     */
    ListData<AppMachDTO> getMachList(Integer ruleId);

    /**
     * 设置报警时间
     *
     * @param request
     */
    void setTime(AppWarnSetTimeParam request);

    /**
     * 获取接收报警消息的用户列表
     *
     * @param ruleId
     * @return
     */
    AppWarnMsgRecDTO userList(Integer ruleId);

    /**
     * 设置报警消息接收人
     *
     * @param request
     */
    void userAdd(AppWarnSetUserParam request);

    /**
     * 报警记录列表
     *
     * @param pageNum
     * @param pageSize
     * @param deptId
     * @param state
     * @param ruleType
     * @param startTime
     * @param endTime
     * @return
     */
    PageData<AppWarnMachRecordDTO> recordList(Integer pageNum, Integer pageSize, Integer deptId, Integer state, Integer ruleType, Date startTime, Date endTime);

    /**
     * 处理设备报警
     *
     * @param user
     * @param request
     */
    void recordHandle(SysUser user, AppWarnHandleParam request);

    /**
     * 批量处理设备报警
     *
     * @param param
     */
    void batchHandle(AppWarnBatchHandleParam param);

    /**
     * 批量删除设备报警
     *
     * @param param
     */
    void del(AppWarnBatchDelParam param);

    /**
     * 设备报警详情
     *
     * @param id
     * @return
     */
    AppWarnDetailDTO recordDetail(Integer id);
}
